package cn.netuo.bumbersoll.helper;

import android.content.Context;
import android.text.TextUtils;
import android.widget.Toast;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.location.AMapLocationQualityReport;

public class LocateHelper {

	private Context mCtx;
	private AMapLocationClient locationClient = null;
	private AMapLocationListener mLocationListener;

	public LocateHelper(Context mCtx, AMapLocationListener mLocationListener) {
		this.mCtx 	= mCtx;
		this.mLocationListener = mLocationListener;
		initLocation();
	}

	/** 初始化定位 */
	private void initLocation(){
		locationClient = new AMapLocationClient(mCtx);
		locationClient.setLocationListener(locationListener);	// 设置定位监听
		locationClient.setLocationOption(getDefaultOption()); 	// 设置定位参数
    }

	/** 默认的定位参数 */
	private AMapLocationClientOption getDefaultOption(){
		AMapLocationClientOption mOption = new AMapLocationClientOption();
		mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//可选，设置定位模式，可选的模式有高精度、仅设备、仅网络。默认为高精度模式
		mOption.setGpsFirst(false);				// 可选，设置是否gps优先，只在高精度模式下有效。默认关闭
		mOption.setHttpTimeOut(30000);			// 可选，设置网络请求超时时间。默认为30秒。在仅设备模式下无效
		mOption.setInterval(5000);				// 可选，设置定位间隔。默认为2秒
		mOption.setNeedAddress(true);			// 可选，设置是否返回逆地理地址信息。默认是true
		mOption.setOnceLocation(true);			// 可选，设置是否单次定位。默认是false
		mOption.setOnceLocationLatest(false);	// 可选，设置是否等待wifi刷新，默认为false.如果设置为true,会自动变为单次定位，持续定位时不要使用
		AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP);// 可选， 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP
		mOption.setSensorEnable(false);			// 可选，设置是否使用传感器。默认是false
		mOption.setWifiScan(true); 				// 可选，设置是否开启wifi扫描。默认为true，如果设置为false会同时停止主动刷新，停止以后完全依赖于系统刷新，定位位置可能存在误差
		mOption.setLocationCacheEnable(true); 	// 可选，设置是否使用缓存定位，默认为true
		return mOption;
	}

	/** 开始定位 */
	public void startLocation(){
		locationClient.startLocation();
	}

	/** 停止定位 */
	public void stopLocation(){
		if(locationClient != null) locationClient.stopLocation();
	}

	/**
	 * 销毁定位
	 * 如果AMapLocationClient是Activity实例化的，
	 * 在Activity的onDestroy中一定要执行AMapLocationClient的onDestroy
	 */
	public void onDestroy(){
		if(null == locationClient) return;
		locationClient.onDestroy();
		locationClient = null;
	}

	/** 定位监听 */
	private AMapLocationListener locationListener = new AMapLocationListener() {
		@Override
		public void onLocationChanged(AMapLocation location) {
			if(null == location) return;
			if(mLocationListener != null) mLocationListener.onLocationChanged(location);
			if(location.getErrorCode() == 0) return;

			//定位失败
			String error = getGPSErrorString(location.getLocationQualityReport().getGPSStatus());
			if(TextUtils.isEmpty(error)) return;
			Toast.makeText(mCtx, error, Toast.LENGTH_SHORT).show();
		}
	};


	/** 获取GPS状态的字符串 */
	private String getGPSErrorString(int statusCode){
		String str = "";
		switch (statusCode){
			case AMapLocationQualityReport.GPS_STATUS_OK:
				// "GPS状态正常";
				break;
			case AMapLocationQualityReport.GPS_STATUS_NOGPSPROVIDER:
				str = "手机中没有GPS Provider，无法进行GPS定位";
				break;
			case AMapLocationQualityReport.GPS_STATUS_OFF:
				str = "GPS关闭，建议开启GPS，提高定位质量";
				break;
			case AMapLocationQualityReport.GPS_STATUS_MODE_SAVING:
				str = "选择的定位模式中不包含GPS定位，建议选择包含GPS定位的模式，提高定位质量";
				break;
			case AMapLocationQualityReport.GPS_STATUS_NOGPSPERMISSION:
				str = "没有GPS定位权限，建议开启gps定位权限";
				break;
		}
		return str;
	}
}

